package com.qi.demo01.Demo;

/**
 * @author zjq
 * @date 2020/3/25 14:51
 */

//卖票例子

import java.util.ArrayList;
import java.util.List;

/**
 * 线程就是一个单独的资源类，没有任何的属性和操作
 */
public class Demo {
    public static void main(String[] args) {
        //并发，多个线程操作一个资源类，把资源类丢入线程
        Ticket ticket = new Ticket();

        List list = new ArrayList();
        //@FunctionalInterface 函数式接口， JDk1.8 lambda表达式（参数）->{代码}
        new Thread(() -> {
            for (int i = 1; i < 40; i++) {
                ticket.sale();
            }
        }, "A").start();
        new Thread(() -> {
            for (int i = 1; i < 40; i++) {
                ticket.sale();
            }
        }, "B").start();
        new Thread(() -> {
            for (int i = 1; i < 40; i++) {
                ticket.sale();
            }
        }, "C").start();


    }
}

class Ticket {
    //属性，方法
    private int number = 30;

    //买票的方式
    //synchronized 本质：排队上厕所
    public synchronized void sale() {
        if (number > 0) {
            System.out.println(Thread.currentThread().getName() + "卖出了" + (number--) + "票，剩余" + number);
        }
    }

}
